//package com.example.waibao.config.scheduled;
//
//import com.example.waibao.config.ScheduledTaskHolder;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.InitializingBean;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
//import org.springframework.scheduling.support.CronTrigger;
//import org.springframework.util.StringUtils;
//
//import java.util.Collection;
//import java.util.List;
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//import java.util.concurrent.ScheduledFuture;
//
///**
// * @Author whh
// * @Date: 2023/03/15/ 19:44
// * @description 任务注册
// */
//public class ScheduledTaskRegistrar implements InitializingBean {
//
//    private static final Logger LOGGER = LoggerFactory.getLogger(ScheduledTaskRegistrar.class);
//
//    /**
//     * 任务调度器
//     */
//    private ThreadPoolTaskScheduler scheduler;
//
//
//    @Autowired
//    private ITask iTask;
//    /**
//     * 任务列表
//     */
////    private List<ITask> taskes;
//
//    private final Map<String, ScheduledTaskHolder> register = new ConcurrentHashMap<>();
//
//
//    public ScheduledTaskRegistrar(ThreadPoolTaskScheduler scheduler) {
//        this.scheduler = scheduler;
//    }
//
//
//    /**
//     * 注册任务
//     */
//    public void register() {
////        for (ITask task : taskes) {
////            ScheduledFuture<?> future = this.scheduler.schedule((Runnable) task, new CronTrigger(task.getCron()));
////            ScheduledTaskHolder holder = new ScheduledTaskHolder();
////            holder.setScheduledFuture(future);
////            holder.setTask(task);
////            //System.out.println(task.getClass().getName());
////            register.put(task.getClass().getName(), holder);
////        }
//            ScheduledFuture<?> future = this.scheduler.schedule((Runnable) iTask, new CronTrigger(iTask.getCron()));
//            ScheduledTaskHolder holder = new ScheduledTaskHolder();
//            holder.setScheduledFuture(future);
//            holder.setTask(iTask);
//            //System.out.println(task.getClass().getName());
//            register.put(iTask.getClass().getName(), holder);
//
//
//    }
//
//
//    /**
//     * 查询所有任务
//     *
//     * @return
//     */
//    public Collection<ScheduledTaskHolder> list() {
//        return register.values();
//    }
//
//
//    /**
//     * 立即执行任务
//     *
//     * @param className
//     */
//    public void start(String className) {
//        ScheduledTaskHolder holder = register.get(className);
//        if (holder != null) {
//            holder.getTask().run();
//        }
//    }
//
//
//    /**
//     * 暂停任务
//     *
//     * @param className
//     */
//    public void pause(String className) {
////        System.out.println(className);
////        System.out.println(register.keySet());
//        ScheduledTaskHolder holder = register.get(className);
//        if (holder != null) {
//            if(holder.terminate()){
//                return;
//            }
//            ScheduledFuture<?> future = holder.getScheduledFuture();
//            future.cancel(true);
//        }
//    }
//
//
//    /**
//     *重启任务
//     * @param className
//     * @param cron
//     */
//    public void restart(String className,String cron){
//        ScheduledTaskHolder holder = register.get(className);
//        if (holder != null) {
//            if(!holder.terminate()){
//                //暂停原任务
//                holder.getScheduledFuture().cancel(true);
//            }
//           // ITask task = holder.getTask();
//            if(!StringUtils.isEmpty(cron)){
//                iTask.setCron(cron);
//               // task.setCron(cron);
//            }
//            ScheduledFuture<?> future = this.scheduler.schedule(iTask, new CronTrigger(cron));
//            holder.setScheduledFuture(future);
//
//        }
//    }
//
//    public void setTaskes(ITask taskes) {
//        this.iTask = taskes;
//    }
//
//    private void log(){
//        register.forEach((k,v)->{
//            LOGGER.info("register {} complete,cron {}",k,v.getTask().getCron());
//
//        });
//
//    }
//
//    @Override
//    public void afterPropertiesSet(){
//        register();
//        log();
//    }
//}
//
